package cn.dj.system.mapper;

import cn.dj.system.domain.Role;
import cn.dj.basic.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 *  Mapper 接口：角色
 * </p>
 *
 * @author dj
 * @since 2023-02-13
 */
public interface RoleMapper extends BaseMapper<Role> {
    /**
     * 中间表t_role_menu - 根据角色id删除菜单
     * @param id
     */
    void delMenusByRoleId(Long id);

    /**
     * 中间表t_role_permission - 根据角色id删除权限
     * @param id
     */
    void delPermissionsByRoleId(Long id);

    /**
     * 向t_role_menu中间表中添加角色和菜单的数据
     * @param id
     * @param menus
     */
//   @Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 - 取别名
    //若@Param("id")不取别名【不写括号里面的内容】，但写了该注解，那么默认别名是param0，param1...
    void addRoleMenus(@Param("id")Long id, @Param("menus") List<Long> menus);

    /**
     *向中间表中添加角色 - 权限信息：t_role_permission
     * @Param作用就是给参数命名
     * 比如在mapper里面某方法A（Long id），当添加注解后A（@Param("id1") int id），
     * 也就是说外部想要取出传入的id值，只需要取它的参数名id1就可以了。
     * 将参数值传如SQL语句中，通过#{id1}进行取值给SQL的参数赋值。
     * @param id
     * @param permissions
     */
    void addRolePermissions(@Param("id")Long id,@Param("permissions") List<Long> permissions);

    /**
     * 根据角色id删除员工-角色中间表中的关联信息
     * @param id
     */
    void delEmployeeRoleByRoleId(Long id);
}
